// 1. 引入 luch-request
import Request from 'luch-request'
import { useUserStore } from '@/stores'
// 2. 配置基地址
const http = new Request({
  baseURL: 'https://consult-api.itheima.net',
})

// 3. 设置请求拦截器
http.interceptors.request.use(
  (config) => {
    // 设置请求头
    const store = useUserStore()
    const token = store.user.token
    if (token) {
      config.header.Authorization = `Bearer ${token}`
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 4. 响应拦截器
http.interceptors.response.use(
  (res) => {
    // 判断响应的状态码 如果不是10000
    // console.log(res, 22222)
    if (res.data.code !== 10000) {
      // 提示用户
      uni.showToast({
        icon: 'error',
        title: res.data.message,
        mask: true,
      })
      // 需要终止代码往下执行
      return Promise.reject(res.data)
    }
    // 对数据进行解构
    return res.data
  },
  (error) => {
    // 处理401的错误
    // console.log(error,22222)
    if (error.statusCode === 401) {
      const store = useUserStore()
      store.clearUser()
      // 跳转到登录页面
      reLogin()
      return Promise.reject(error)
    }
    return Promise.reject(error)
  }
)

// 保存tabbar页面
const tabbarList = [
  'pages/index/index',
  'pages/wiki/index',
  'pages/my/index',
  'pages/notify/index',
]

// 用户跳转页面
const reLogin = () => {
  // 获取页面栈
  const pages = getCurrentPages()
  // 获取当前页面
  const currentPage = pages.at(-1)
  // 获取完整的路由
  const fullPath = currentPage.$page.fullPath
  // 小程序 tabbar页面 一种是普通页面
  const openType = tabbarList.includes(currentPage.$page.route)
    ? 'switchTab'
    : 'redirectTo'
  // 将 fullPath和openType记录到pinia里面
  const store = useUserStore()
  store.redirectURL = fullPath
  store.openType = openType
  // 跳到登录页面
  uni.redirectTo({
    url: '/pages/login/index',
  })
}

export { http }
